Vous devez activer Javascript pour accéder à ce site

Le XML

Qu’est-ce que le XML ?

Le XML ou Extensible Markup Language est une syntaxe générique utilisée pour formater des données avec des balises simples et lisibles. Par exemple, pour décrire un étudiant, une syntaxe XML possible serait :

<étudiant>
 <nom>Tremblay</nom>
 <prénom>Jean</prénom>
 <matricule>849490234</matricule>
</étudiant>

Par la suite, si nous désirons décrire l’ensemble des étudiants inscrits à un cours, nous pourrions utiliser la syntaxe suivante :

<cours>
 <nom>Introduction au traitement de texte</nom>
 <université>Téluq</université>
 <inscriptions>
   <étudiant>
     <nom>Tremblay</nom>
     <prénom>Jean</prénom>
     <matricule>849490234</matricule>
   </étudiant>
   <étudiant>
     <nom>Hotte</nom>
     <prénom>Richard</prénom>
     <matricule>8443444</matricule>
   </étudiant>
 </inscriptions>
</cours>

Dans ces exemples, observez la présence de texte entre les signes < et > : il s’agit de balises. Une balise marque le début ou la fin d’un élément. La balise <cours> marque le début de l’élément « cours », alors que la balise </cours> en marque la fin. Notez qu’un élément peut contenir d’autres éléments, et ainsi de suite.

Cette nouvelle syntaxe a émergé dans les années 1990 avec le développement du web. Depuis, le XML est devenu très courant dans l’industrie informatique et il fait partie des notions de base que les informaticiens doivent maîtriser, au même titre que les bases de données ou la programmation orientée objet. Elle est caractérisée par la simplicité d’abord : le HTML et le XML ont un parent commun, le SGML qui était complexe et difficile à maîtriser ; on a donc voulu « réparer » le SGML, en proposant des solutions plus simples. Entre autres choses, le web a permis d’observer que les technologies simples pouvaient être très puissantes ; c’est ce qui en a fait toute la force : une technologie accessible, ouverte et avec un minimum de complexité.

D’ailleurs, l’inventeur du web, Tim Berners-Lee, a rapidement adopté le XML et en propose, depuis, une nouvelle vision qui repose entièrement sur le XML : le web sémantique. La prémisse est que, si l’on sépare le contenu de la présentation, le web n’en sera que plus riche. En effet, on observe que les formats qui confondent la présentation et le contenu, tels que Microsoft Word ou le HTML, limitent la capacité de nos logiciels. Par exemple, il peut être difficile pour un logiciel de trouver automatiquement la deuxième section d’un texte (placé sur le web) et de la reformater automatiquement pour qu’on puisse l’inclure dans un rapport annuel.

Quelques notions du XML

Un document XML est essentiellement du texte contenant des balises. Une balise est un segment de texte commençant par < et se terminant par >, comme <lavie>. Voici un exemple simple de document XML :

<personne>
  <nom>Jean</nom>
  <age>42</age>
</personne>       

Le XML est très présent sur le web et les documents XML peuvent être affichés par certains navigateurs récents, comme Internet Explorer et Firefox. On échange aussi le XML entre des logiciels et des serveurs sur le web ; le XML est aussi de plus en plus utilisé en bureautique comme format pour les traitements de texte, par exemple. Comme un document XML est avant tout du texte, il n’est pas avantageux d’utiliser le XML pour stocker des informations de type multimédia (vidéo, musique) ; le champ d’application du XML demeure toutefois très vaste.

Le XML définit une grammaire stricte et relativement simple de manière que les outils XML génériques puissent traiter tous les documents XML, peu importe leur domaine d’application. On dit d’un document qui respecte cette grammaire qu’il est bien formé. Ainsi, il n’est pas nécessaire d’utiliser des outils coûteux et propriétaires pour faire du XML.

Quelques principes et notions importantes du XML

Rappelons qu’une balise est un segment de texte commençant par <, et se terminant par >. Par exemple, <lavie> est une balise qui marque le début de l’élément « lavie ». Une balise commençant par </, comme </lavie>, est une balise de fin ; dans cet exemple, elle termine l’élément « lavie ».

Le nom XML de la balise de début est le texte suivant le symbole < (ou </ pour une balise de fin) et pouvant contenir n’importe quelle lettre ou chiffre (a, b,... 0, 1, 2,...) ou les trois symboles de ponctuation, soit la marque de soulignement ( _ ), le trait d’union ( - ) ou le point ( . ) ; un nom XML ne peut contenir d’autres symboles de ponctuation, ni un espace. En outre, il ne peut pas commencer par un chiffre, un trait d’union ou un point. Par exemple, le nom XML de la balise <lavie> est « lavie », alors que la balise <8lavie> ne serait pas autorisée. Sauf pour ce qui est des noms qui proviennent des spécifications officielles, un nom XML ne peut débuter par xml, XML, XmL, xML, XMl, Xml, xMl ou xmL.

Pour les balises de début, aussi dites d’ouverture, on peut ajouter un attribut au nom XML de la balise. Un attribut porte un nom XML qui doit respecter les mêmes règles que les noms XML des balises ; il est suivi du symbole « = » et d’une valeur placée entre guillemets (") ou apostrophes (’). Par exemple, la balise <lavie age="5"> indique que l’élément la vie a un attribut (age="5") qui a comme nom XML « age » et comme valeur « 5 ». Une balise peut avoir plusieurs attributs, comme <lavie age="5" sexe="M">, mais ils doivent tous porter des noms XML différents : la balise <lavie age="5" age="7"> n’est pas autorisée.

Un élément est l’ensemble du texte borné par deux balises ayant le même nom XML, comme <lavie> et </lavie>. On dit que l’élément <lavie></lavie> a pour nom XML « lavie ». L’élément hérite des attributs de sa balise de départ : l’élément <lavie age="5"> a l’attribut « age="5" ». Il est à noter que la casse est significative en XML : les balises <A> et <a> n’ont pas le même nom XML. Dans le cas particulier où l’élément est vide, sans contenu, on peut remplacer <lavie></lavie> par <lavie/> pour abréger. Un élément peut contenir d’autres éléments, comme dans <lavie><a></a></lavie>, ou du texte, ou du texte et des éléments comme <lavie>un texte<a> un mot </a>du texte</lavie>.

Si un élément contient d’autres éléments, il doit aussi contenir, entre ses balises de début et de fin, les balises de début et de fin de chaque élément. Notez, de plus, que deux éléments ne peuvent se chevaucher, comme <b><a></b></a> ; avant de passer à un autre élément, il faut terminer le premier avec sa balise de fin. L’exemple précédent est du XML mal formé !

Pour bien comprendre, illustrons notre propos par un exemple. Un document XML prend la forme suivante :

<racine>
  <element1>http://www.google.com</element1>
  <element2>Un moteur de recherche</element2>
</racine>       

Dans ce document, il y a trois éléments. Tout d’abord, il y a l’élément-racine qui comprend tout ce qui est entre les balises <racine> et </racine>. La première balise marque le début de l’élément-racine. Tout document XML bien formé doit avoir un élément-racine et un seul élément-racine. Tous les autres éléments doivent être contenus dans cet élément-racine. Dans notre exemple, cet élément a deux sous-éléments :

<element1>http://www.google.com</element1>

et

<element2>Un moteur de recherche</element2>

Les éléments peuvent eux aussi avoir des attributs, par exemple <a att="test"></a>, mais il faut obligatoirement mettre la valeur de l’attribut entre guillemets (") ou apostrophes (’).

On peut ajouter un attribut à un des éléments de la façon suivante :

<racine date="aujourd'hui">
  <element1>http://www.google.com</element1>
  <element2>Un moteur de recherche</element2>
</racine>

Le texte « date="aujourd’hui" » est un attribut de l’élément-racine avec pour nom « date » et comme valeur d’attribut « aujourd’hui ».
Il faut obligatoirement mettre la valeur de l’attribut entre guillemets (") ou apostrophes (’).

Un document XML qui respecte ces règles de base est dit « bien formé ». Pour éviter toute confusion, il convient de n’employer que cette expression et d’éviter de recourir à des synonymes (par exemple : « correct »).

Appels d’entités

Un élément peut contenir du texte, mais ne peut contenir le symbole <, comme dans l’exemple <a><</a>, parce que cela mène à de la confusion. Le symbole < est le seul symbole qui ne peut être utilisé dans du texte, entre deux balises. Que faire alors s’il faut utiliser le caractère < dans un texte mathématique, par exemple ? Il faut utiliser un appel d’entité. Un appel d’entité est un bout de texte qui commence par une esperluette ( & ) et se termine par un point-virgule ( ; ). Les appels d’entités suivants font partie de la définition du XML :

Appel d’entité Résultat
&lt ;
&amp ; &
&gt ; >
&quot ; "
&apos ;

De plus, parce que les appels d’entités utilisent le symbole &, on ne peut donc pas utiliser ce symbole directement dans un texte ; il faut faire un appel d’entité. Ainsi, si le nom de votre compagnie est John&Smith, vous ne devrez pas utiliser un élément comme ceci <nom>John&Smith</nom> ; il vous faudra plutôt utiliser <nom>John&amp ;Smith</nom>.

On utilise aussi les appels d’entités pour noter les valeurs des attributs. Supposons que la valeur d’un attribut est un guillemet suivi d’une apostrophe ("’). Les deux choix possibles <nom att="'""> et <nom att=''"'> ne sont pas valables. Dans ce cas, il faudra écrire <nom att="'&quot ;">, <nom att='&apos ;"'>, <nom att="&apos ;&quot ;"> ou <nom att='&apos ;&quot ;'>.

La déclaration XML

La déclaration XML ressemble à s’y méprendre à une instruction de traitement et prend la forme < ?xml ... ?>. Une déclaration XML n’est pas une balise ou un élément. Le contenu d’une déclaration XML comporte généralement au maximum trois attributs : version="...", encoding="..." et standalone="...". La version 1.0 du XML est la plus utilisée ; bien que la version 1.1 existe, elle est fort peu utilisée. On utilisera souvent une déclaration XML avec « encoding="ISO-8859-1" » pour pouvoir utiliser les accents dans le document : par défaut, un document XML utilise un encodage Unicode (UTF-8 ou UTF-16) [1], mais celui-ci n’est pas toujours supporté par les outils courants, tel le Bloc-notes (Notepad) de Microsoft ; l’utilisation des accents en français sans la déclaration « encoding="ISO-8859-1" » peut entraîner des problèmes quand on ne dispose pas de logiciels récents. L’attribut « standalone » peut être omis en général. La déclaration XML doit obligatoirement figurer au tout début du document ou être carrément absente : même un espace n’est pas permis.

Voici un exemple :

<?xml version="1.0" encoding="ISO-8859-1"?>
<étudiant>
   Jean
</étudiant>

Utilisation simple du XML en recherche d’informations

Supposons que vous vouliez utiliser un outil qui cherche le prix le plus bas de certains produits. Vous pourriez alors, par exemple, faire un tour sur le site Amazon et traiter les pages web en essayant d’y trouver le prix des divers articles. Un tel projet serait très difficile. Une alternative plus simple est d’utiliser les services web d’Amazon qui vous permettent d’avoir accès aux prix des produits sous la forme XML. Voici par exemple la description d’un album de Bryan Adams que le site Amazon nous donne :

<ItemAttributes>
<Artist>Bryan Adams</Artist>
<Binding>Audio CD</Binding>
<Format>Original recording remastered</Format>
<Label>A&M</Label>
<ListPrice>
<CurrencyCode>USD</CurrencyCode>
<FormattedPrice>$19.98</FormattedPrice>
</ListPrice>
<ProductGroup>Music</ProductGroup>
<ReleaseDate>2005-10-18</ReleaseDate>
<Title>Anthology</Title>
</ItemAttributes>

On constate qu’il est facile pour une machine de déterminer le prix de l’album, sa date de sortie et ainsi de suite. La tâche est beaucoup plus facile que si on tentait de traiter une page web typique. En ce sens, la représentation des objets en XML est une solution à certains problèmes de recherche d’informations.

Question d’autoévaluation

Corrigez le document suivant et dites combien d’éléments il compte.

<?xml version="1.0" ?>
<htm>
<body>
<pre>
x < y
</pre>
</body>
</htm>


[1L’encodage Unicode est de plus en plus utilisé et a l’avantage de représenter plus de 99 000 caractères contre moins de 255 pour un encodage classique comme ISO-8859-1.